In [1]:
import itk
import ipyvolume
import ipyvolume.pylab
import numpy as np
In [2]:
# Get a brain MRI dataset
import requests

url = 'https://data.kitware.com/api/v1/file/588271308d777f4f3f3072e2/download'
filename = 'brainweb165a10f17.mha'

request = requests.get(url)
with open('brainweb165a10f17.mha', 'wb') as fp:
    fp.write(request.content)
In [3]:
# Read in the image
reader = itk.ImageFileReader.New(FileName=filename)
reader.Update()
input_image = reader.GetOutput()
InputImageType = type(input_image)
In [4]:
input_array = itk.PyBuffer[InputImageType].GetArrayFromImage(input_image)
In [5]:
ipyvolume.quickvolshow(input_array, level=[0,0.5,1.0], opacity=[0.0, 0.08, 0.2], lighting=True, ambient_coefficient=0.27)
In [6]:
# The image type we will use to process the image
PixelType = itk.ctype('float')
Dimension = 3

ImageType = itk.Image[PixelType, Dimension]
In [7]:
InputImageType = type(input_image)
caster = itk.CastImageFilter[InputImageType, ImageType].New(input_image)
In [8]:
# Smooth the image
smoother = itk.CurvatureFlowImageFilter.New(caster.GetOutput())
smoother.SetNumberOfIterations(6)
smoother.SetTimeStep(0.05)
In [9]:
confidence_connected = itk.ConfidenceConnectedImageFilter[ImageType, InputImageType].New()
confidence_connected.SetInput(smoother.GetOutput())
confidence_connected.SetMultiplier(2.5)
confidence_connected.SetNumberOfIterations(5)
confidence_connected.SetInitialNeighborhoodRadius(2)
confidence_connected.SetReplaceValue(255)

SeedType = itk.Index[Dimension]
seed1 = SeedType()
seed1[0] = 118
seed1[1] = 133
seed1[2] = 92
confidence_connected.AddSeed(seed1)

seed2 = SeedType()
seed2[0] = 63
seed2[1] = 135
seed2[2] = 94
confidence_connected.AddSeed(seed2)

seed3 = SeedType()
seed3[0] = 63
seed3[1] = 157
seed3[2] = 90
confidence_connected.AddSeed(seed3)

seed4 = SeedType()
seed4[0] = 111
seed4[1] = 150
seed4[2] = 90
confidence_connected.AddSeed(seed4)

seed5 = SeedType()
seed5[0] = 111
seed5[1] = 50
seed5[2] = 88
confidence_connected.AddSeed(seed5)
In [10]:
writer = itk.ImageFileWriter.New(confidence_connected.GetOutput())
writer.SetFileName('WhiteMatterSegmentation.mha')
In [11]:
# Runs the processing pipeline
writer.Update()
In [12]:
output_image = confidence_connected.GetOutput()
In [13]:
OutputImageType = type(output_image)
output_array = itk.PyBuffer[OutputImageType].GetArrayFromImage(output_image)
In [14]:
ipyvolume.quickvolshow(output_array, lighting=False, opacity=0.05, controls=False)